//1.概念
//(1).原始值 最简单的数据  
//(2).引用值 多个值构成的对象

function test1 () {

    //引用值
    let person = new Object();
    person.name = "Nicholas";
    console.log(person.name); // "Nicholas"

    //原始值
    //原始值不能有属性，尽管尝试给原始值添加属性不会报错
    let name = "Nicholas";
    name.age = 27;
    console.log(name.age); // undefined

    //     原始类型的初始化可以只使用原始字面量形式。如果使用的是 new 关键字，则 JavaScript 会
    // 创建一个 Object 类型的实例，但其行为类似原始值。下面来看看这两种初始化方式的差异：
    let name1 = "Nicholas";
    let name2 = new String("Matt");
    name1.age = 27;
    name2.age = 26;
    console.log(name1.age); // undefined 
    console.log(name2.age); // 26 
    console.log(typeof name1); // string 
    console.log(typeof name2); // object
}
test1();


//复制值  复制值和原始值指针指向同一对象
function test2 () {

    let obj1 = new Object();
    let obj2 = obj1;
    obj1.name = "Nicholas";
    console.log(obj2.name); // "Nicholas"

}
test2()


//3.判断值类型 
function test3 () {
    //typeof 只能判断原始值
    let s = "Nicholas";
    let b = true;
    let i = 22;
    let u;
    let n = null;
    let o = new Object();
    console.log(typeof s); // string 
    console.log(typeof i); // number 
    console.log(typeof b); // boolean 
    console.log(typeof u); // undefined 
    console.log(typeof n); // object 
    console.log(typeof o); // object

    //instanceof判断引用值
    let person = null;
    console.log(person instanceof Object); // 变量 person 是 Object 吗？ false
    let colors = [];
    console.log(colors instanceof Array); // 变量 colors 是 Array 吗？ true

    let person1 = Object();
    console.log(person1 instanceof Object); // true



}
test3()